home *** CD-ROM | disk | FTP | other *** search
- package FileHandle;
-
- use 5.006;
- use strict;
- our($VERSION, @ISA, @EXPORT, @EXPORT_OK);
-
- $VERSION = "2.01";
-
- require IO::File;
- @ISA = qw(IO::File);
-
- @EXPORT = qw(_IOFBF _IOLBF _IONBF);
-
- @EXPORT_OK = qw(
- pipe
-
- autoflush
- output_field_separator
- output_record_separator
- input_record_separator
- input_line_number
- format_page_number
- format_lines_per_page
- format_lines_left
- format_name
- format_top_name
- format_line_break_characters
- format_formfeed
-
- print
- printf
- getline
- getlines
- );
-
- #
- # Everything we're willing to export, we must first import.
- #
- import IO::Handle grep { !defined(&$_) } @EXPORT, @EXPORT_OK;
-
- #
- # Some people call "FileHandle::function", so all the functions
- # that were in the old FileHandle class must be imported, too.
- #
- {
- no strict 'refs';
-
- my %import = (
- 'IO::Handle' =>
- [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets
- eof flush error clearerr setbuf setvbuf _open_mode_string)],
- 'IO::Seekable' =>
- [qw(seek tell getpos setpos)],
- 'IO::File' =>
- [qw(new new_tmpfile open)]
- );
- for my $pkg (keys %import) {
- for my $func (@{$import{$pkg}}) {
- my $c = *{"${pkg}::$func"}{CODE}
- or die "${pkg}::$func missing";
- *$func = $c;
- }
- }
- }
-
- #
- # Specialized importer for Fcntl magic.
- #
- sub import {
- my $pkg = shift;
- my $callpkg = caller;
- require Exporter;
- Exporter::export($pkg, $callpkg, @_);
-
- #
- # If the Fcntl extension is available,
- # export its constants.
- #
- eval {
- require Fcntl;
- Exporter::export('Fcntl', $callpkg);
- };
- }
-
- ################################################
- # This is the only exported function we define;
- # the rest come from other classes.
- #
-
- sub pipe {
- my $r = new IO::Handle;
- my $w = new IO::Handle;
- CORE::pipe($r, $w) or return undef;
- ($r, $w);
- }
-
- # Rebless standard file handles
- bless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle";
- bless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle";
- bless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle";
-
- 1;
-
- __END__
-
-